package xyz.zhouzhaodong.crm.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xyz.zhouzhaodong.crm.dto.TodoDto;
import xyz.zhouzhaodong.crm.entity.Todo;
import xyz.zhouzhaodong.crm.mapper.TodoMapper;
import xyz.zhouzhaodong.crm.service.ITodoService;
import xyz.zhouzhaodong.crm.util.RestMessage;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * <p>
 * 待办 服务实现类
 * </p>
 *
 * @author zhouzhaodong
 * @since 2020-06-16
 */
@Service
public class TodoServiceImpl extends ServiceImpl<TodoMapper, Todo> implements ITodoService {

    @Resource
    TodoMapper todoMapper;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public RestMessage addTodo(TodoDto todoDto) {
        try {
            // 新增待办
            Todo todo = todoDtoToTodo(todoDto);
            String id = UUID.randomUUID().toString().replaceAll("-", "");
            todo.setId(id);
            todo.setCreateUser(todoDto.getStaffId());
            todo.setCreateTime(new Date());
            todoMapper.insert(todo);
            return RestMessage.success(id);
        } catch (Exception e) {
            return RestMessage.failed(e.getMessage());
        }
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public RestMessage deleteTodo(TodoDto todoDto) {
        try {
            // 删除待办
            Todo todo = new Todo();
            todo.setFlag(1);
            todo.setUpdateUser(todoDto.getStaffId());
            todo.setUpdateTime(new Date());
            todoMapper.updateById(todo);
            return RestMessage.success();
        } catch (Exception e) {
            return RestMessage.failed(e.getMessage());
        }
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public RestMessage updateTodo(TodoDto todoDto) {
        try {
            // 更新待办
            Todo todo = todoDtoToTodo(todoDto);
            todo.setUpdateUser(todoDto.getStaffId());
            todo.setUpdateTime(new Date());
            todo.setStaffId(null);
            todoMapper.updateById(todo);
            return RestMessage.success();
        } catch (Exception e) {
            return RestMessage.failed(e.getMessage());
        }
    }

    @Override
    public RestMessage selectTodo(TodoDto todoDto) {
        int pageNo = todoDto.getPageNo();
        int pageSize = todoDto.getPageSize();
        if(todoDto.getFlag() == null){
            todoDto.setFlag(0);
        }
        if (pageNo == 0 && pageSize == 0) {
            // 不进行分页查询
            List<TodoDto> list = todoMapper.selectTodo(todoDto);
            return RestMessage.success(list);
        } else {
            // 进行分页查询
            Page<TodoDto> page = new Page<>();
            page.setCurrent(pageNo);
            page.setSize(pageSize);
            IPage<TodoDto> list = todoMapper.selectTodo(todoDto, page);
            return RestMessage.success(list);
        }
    }

    /**
     * todoDto转todo
     *
     * @param todoDto
     * @return
     */
    public Todo todoDtoToTodo(TodoDto todoDto) {
        Todo todo = new Todo();
        todo.setId(todoDto.getId());
        todo.setStaffId(todoDto.getStaffId());
        todo.setCustomerId(todoDto.getCustomerId());
        todo.setTitle(todoDto.getTitle());
        todo.setContent(todoDto.getContent());
        todo.setType(todoDto.getType());
        todo.setReminderTime(todoDto.getReminderTime());
        todo.setStatus(todoDto.getStatus());
        return todo;
    }
}
